package main

import "fmt"

type Test struct {
	x int
}

func (receiver *Test) name() {
	fmt.Println("test")
	fmt.Printf("%p", receiver)
}
func (receiver Test) test() {
	fmt.Println("Test")
	fmt.Printf("%p", &receiver)
}
func main() {
	test := Test{}
	fmt.Printf("%p", &test)
	test.test()
	test.name()

	test1 := &test
	test1.name()
	test1.test()
}

//总结: 当接收者为值类型时 会通过复制的形式进行传参(即完全不同的两个实例) 当接收着为指针类型的时候 会通过指针的方式传参(同一个实例)
//无论你的调用者是值类型还是指针类型 go语言底层都会自适应地调整你的类型(调整和解引用指针使得调用可以被执行)
//使得无论你是什么实例都只与你调用的方法有关(意思就是即使你使用了指针调用函数，但是函数的接受者是值类型，所以函数内部操作还是对副本的操作，而不是指针操作)
